package com.shangma.poi;

import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;
import java.util.List;
import java.util.Map;

// 读取表格
public class ExcelInput {
    public static void main(String[] args) throws IOException {
//        ExcelReader reader = ExcelUtil.getReader(FileUtil.file("E:\\员工信息.xlsx"),1);
//        List<Map<String, Object>> maps = reader.readAll();
//        System.out.println(maps);

        ExcelReader reader = ExcelUtil.getReader("e:/员工信息.xlsx",1);
        List<List<Object>> readAll = reader.read();
        System.out.println(readAll);
    }

    private static void excelOri() throws IOException {
        // 加载xlsx文件
        Workbook workbook = new XSSFWorkbook("E:\\员工信息.xlsx");
        // 通过工作簿查找sheet  参数是sheet的索引，从0开始计算
        Sheet sheet = workbook.getSheetAt(0);
        // 获取一共多少行
        int maxRow = sheet.getLastRowNum();
        for (int i = 0;i <= maxRow;i++){
            // 获取具体的每一行
            Row row = sheet.getRow(i);
            // 获取这一行总共有多少个单元格
            int lastCellNum = row.getLastCellNum();

            StringBuffer buffer = new StringBuffer();
            // 遍历这一行，获取所有的单元格
            for (int j = 0;j <=lastCellNum;j++){
                // 获取单元格
                Cell cell = row.getCell(j);
                if (cell != null){
                    Object value = getValue(cell);
                    buffer.append(value).append("---");
                }
            }
            System.out.println(buffer);
        }
    }

    public static Object getValue(Cell cell){
        // 获取单元格的类型
        CellType cellTypeEnum = cell.getCellTypeEnum();
        Object obj = null;
        switch (cellTypeEnum){
            case STRING://字符串类型
                obj = cell.getStringCellValue();
                break;
            case BOOLEAN://boolean类型
                obj = cell.getBooleanCellValue();
                break;
            case NUMERIC://数字和日期类型
                if (DateUtil.isCellDateFormatted(cell)){//判断单元格中的类型是否是日期类型
                    // 日期类型
                    obj = cell.getDateCellValue();
                }else{
                    // 数字类型
                    obj = cell.getNumericCellValue();
                }
                break;
            case FORMULA:// 公式类型
                obj = cell.getCellFormula();
                break;
        }
        return obj;
    }
}
